// 观察者（演化出了发布订阅模式）
const Observer = (function () {
  // 消息队列
  let _message = [];
  return {
    // 订阅事件
    regist(type, fn) {
      // 如果是第一次注册，就放到一个数组中
      if (!_message[type]) {
        _message[type] = [fn];
      }
      // 如果不是第一次注册，就添加到数组中
      else {
        _message[type].push(fn);
      }
    },
    // 触发事件
    trigger(type, args) {
      if (!_message[type]) {
        return;
      }
      for (var i = 0; i < _message[type].length; i++) {
        _message[type][i].call(this, { type, args });
      }
    },
    // 移除事件
    remove() {},
  };
})();

// 订阅消息
Observer.regist("test", function (e) {
  console.log("订阅的test消息", e);
});

Observer.trigger("test", "trigger的数据");

// 学生类
const Student = function (result) {
  this.result = result;
  this.say = function () {
    console.log(this.result);
  };
};
Student.prototype.answer = function () {
  Observer.regist(question, this.say);
};
const Teacher = function () {};
Teacher.prototype.ask = function (question) {
  Observer.trigger(question);
};

const s1 = Student("你好");
const s2 = Student("hi");

const t = new Teacher();

s1.answer("你好啊");
s2.answer("hello啊");
s2.answer("hi啊");

t.ask("你好啊");
